package com.demo.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author lkz
 * @version 1.0.0
 * @ClassName FanoutConfig.java
 * @Description TODO
 * @createTime 2022年04月08日 23:28:00
 */
@Configuration
public class FanoutConfig {

    /*** 声明交换机 */
    @Bean
    public FanoutExchange fanoutExchange() {
        /**
         交换机名称
         持久性标志：是否持久化,默认是true即声明一个持久的exchange,该exchange将在服务器重启后继续运行
         自动删除标志：是否自动删除，默认为false,如果服务器想在exchange不再使用时删除它，则设置为true
         **/

        FanoutExchange fanoutExchange = new FanoutExchange("logs");
        return fanoutExchange;
    }

    /*** 声明队列 */
    @Bean
    public Queue fanoutQueue1() {
        /**
         name：队列名称
         durable：是否持久化,默认是true,持久化队列，会被存储在磁盘上，当消息代理重启时仍然存在
         exclusive：是否排他，默认为false，true则表示声明了一个排他队列（该队列将仅由声明者连接使用），如果连接关闭，则队列被删除。此参考优先级高于durable
         autoDelete：是否自动删除，默认是false，true则表示当队列不再使用时，服务器删除该队列
         **/

        Queue queue = new Queue("fanout_queue1");
        return queue;
    }

    /*** 声明队列 */
    @Bean
    public Queue fanoutQueue2() {
        Queue queue = new Queue("fanout_queue2");
        return queue;
    }
    /***把 fanout_queue1 队列绑定到交换机 */
    @Bean
    public Binding bindingQ1() {
        Binding binding = BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange());
        return binding;
    }

    /***把 fanout_queue2 队列绑定到交换机 */
    @Bean
    public Binding bindingQ2() {
        Binding binding = BindingBuilder.bind(fanoutQueue2()).to(fanoutExchange());
        return binding;
    }

}
